###########################################################################################################################
# 
# vbFavorites for vBulletin 3.0.5 - 3.0.7
# By: Dark Visor (Anthony Kanevsky, ankan925@optonline.net)
# Released: May 22, 2005
# Renta-a-Coder ID: #1360893
# http://www.rentacoder.com/RentACoder/SoftwareCoders/showBioInfo.asp?lngAuthorId=1360893
# Warning: Do not redistribute or modify this hack without my prior consent!
#    
#http:/www.nabdh-alm3ani.net
###########################################################################################################################

### Description: ###
---------------------------------------------------------------------------------------------------------------------------
Did you ever find a useful thread on a bb? Did you want to save it for reading later? Did you have to choosing between
subscribing to the thread and clogging your mailbox or adding it to your browser favorites and never finding it afterwards?
The problem has been solved!

With this hack, you can create your own personalized favorites menu within the bulletin board itself. You can add both posts
and threads to the favorites. You can access the favorites from your usercp homepage. You can also specify a custom name
for your favorites entry. It will also display last 5 favorite threads and posts of yours in the navbar.
See screenshots for more.
---------------------------------------------------------------------------------------------------------------------------

### Version History: ###
---------------------------------------------------------------------------------------------------------------------------
1.02
+ Added TABLE_PREFIX for greater compatibility
+ Fixed comma in the table creation query

1.01
+ Added Latest 5 Threads and Posts in Navbar

1.00
First Public Release 
---------------------------------------------------------------------------------------------------------------------------

   
Queries To Run: 1

 6 
Phrases
 to Add: 6

 4   5
Templates
 to Add: 4
 to Modify: 5

  
Files:
 to Add: 1
	./vbfavorites.php
 3 
 to Modify: 3
	./usercp.php
	./global.php
	./includes/functions_databuild.php

---------------------------------------------------------------------------------------------------------------------------
  10 
 
---------------------------------------------------------------------------------------------------------------------------
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$																				$$$
$$$								RUN QUERIES											$$$
$$$																				$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
---------------------------------------------------------------------------------------------------------------------------
NOTE: If you have a table prefix, replace 'favorites' in the following query with 'PREFIX_favorites'.
	If you don't know what a prefix is or you are sure you don't have one, then do not worry about it.
       
---------------------------------------------------------------------------------------------------------------------------
CREATE TABLE `favorites` (
`entry_id` INT( 10 ) UNSIGNED NOT NULL ,
`entry_type` VARCHAR( 10 ) NOT NULL ,
`entry_title` VARCHAR( 255 ) NOT NULL ,
`userid` INT( 10 ) UNSIGNED NOT NULL ,
`dateline` int(100) unsigned NOT NULL default '0'
);
---------------------------------------------------------------------------------------------------------------------------
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$															$$$
$$$				  	NEW PHRASES							$$$
$$$															$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
---------------------------------------------------------------------------------------------------------------------------
  
###########################################################################################################################
: vbfavorites_entryadded
: Front-End Redirect Messages
###########################################################################################################################
:
ǡ     .

###########################################################################################################################
: vbfavorites_entryupdated
: Front-End Redirect Messages
###########################################################################################################################
:
   .

###########################################################################################################################
: vbfavorites_entryexists
: Front-End Error Messages
###########################################################################################################################
:
     .    .

###########################################################################################################################
: vbfavorites_titlemissing
: Front-End Error Messages
###########################################################################################################################
:
     .

###########################################################################################################################
: vbfavorites_invalidsource
: Front-End Error Messages
###########################################################################################################################
:
 .       ɡ   .

###########################################################################################################################
: vbfavorites_invalidentry
: Front-End Error Messages
###########################################################################################################################
:
    .

---------------------------------------------------------------------------------------------------------------------------
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$																				$$$
$$$							 	FILE CHANGES										$$$
$$$																				$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
---------------------------------------------------------------------------------------------------------------------------

###########################################################################################################################
#  
# ./global.php
###########################################################################################################################

---------------------------------------------------------------------------------------------------------------------------
 
---------------------------------------------------------------------------------------------------------------------------

// #############################################################################
// build $logincode template
$logincode = construct_login_code();

if (DB_QUERIES)
{
	$pageendtime = microtime();
	$starttime = explode(' ', $pagestarttime);
	$endtime = explode(' ', $pageendtime);
	$aftertime = $endtime[0] - $starttime[0] + $endtime[1] - $starttime[1];
	echo "End call of global.php:  $aftertime\n";
	echo "\n<hr />\n\n";
}

---------------------------------------------------------------------------------------------------------------------------
 
---------------------------------------------------------------------------------------------------------------------------

// #############################################################################
// Last favorite threads and posts
// #############################################################################

$lastfavthreadlimit = 5;
$lastfavpostlimit = 5;

$lastfavthreadbit = '';
$lastfavpostbit = '';

if (!$bbuserinfo['userid'])
{
	$show['lastfavthreads'] = false;
	$show['lastfavposts'] = false;
}
else
{
	$lastfavthreads = $DB_site->query("SELECT * FROM " . TABLE_PREFIX . "favorites WHERE entry_type='thread' AND userid = '$bbuserinfo[userid]' ORDER BY dateline DESC LIMIT $lastfavthreadlimit");

	if ($DB_site->num_rows($lastfavthreads) > 0)
	{
		while ($thread = $DB_site->fetch_array($lastfavthreads))
		{
			$lastfavthreadbit .= "<tr><td class='vbmenu_option'><a href='showthread.php?$session[sessionurl]t=$thread[entry_id]'>$thread[entry_title]</a></td></tr>";
		}

		$show['lastfavthreads'] = true;
	}
	else
	{
		$show['lastfavthreads'] = false;
	}

	$lastfavposts = $DB_site->query("SELECT * FROM " . TABLE_PREFIX . "favorites WHERE entry_type='post' AND userid = '$bbuserinfo[userid]' ORDER BY dateline DESC LIMIT $lastfavpostlimit");

	if ($DB_site->num_rows($lastfavposts) > 0)
	{
		while ($post = $DB_site->fetch_array($lastfavposts))
		{
			$lastfavpostbit .= "<tr><td class='vbmenu_option'><a href='showpost.php?$session[sessionurl]p=$post[entry_id]'>$post[entry_title]</a></td></tr>";
		}

		$show['lastfavposts'] = true;
	}
	else
	{
		$show['lastfavposts'] = false;
	}
}

###########################################################################################################################
#  
# ./usercp.php
###########################################################################################################################

---------------------------------------------------------------------------------------------------------------------------
 
---------------------------------------------------------------------------------------------------------------------------

// ############################### start subscribed forums ###############################

---------------------------------------------------------------------------------------------------------------------------
 
---------------------------------------------------------------------------------------------------------------------------

// ############################### start favorites ######################################

if (isset($_POST['deletefavorites']))
{
	foreach($_POST['entry_id'] as $value)
	{
		$DB_site->query("DELETE FROM " . TABLE_PREFIX . "favorites WHERE userid='$bbuserinfo[userid]' AND entry_id='" . addslashes($value) . "' AND entry_type='" . addslashes($_POST['entry_type']) . "' LIMIT 1");
	}
}

// ############################### start favorite threads ################################

$favoritethreads = $DB_site->query("
				SELECT favorites.*, thread.postusername, forum.forumid, forum.title as forumtitle 
				FROM " . TABLE_PREFIX . "favorites as favorites
				LEFT JOIN " . TABLE_PREFIX . "thread as thread ON (thread.threadid = favorites.entry_id)
				LEFT JOIN " . TABLE_PREFIX . "forum as forum ON (forum.forumid = thread.forumid)
				WHERE favorites.userid = '$bbuserinfo[userid]'
				AND favorites.entry_type = 'thread'
				ORDER BY favorites.entry_title
				");

if ($DB_site->num_rows($favoritethreads) > 0)
{
	while ($thread = $DB_site->fetch_array($favoritethreads))
	{
		eval('$favoritethreadbits .= "' . fetch_template('vbfavorites_favthreadbit') . '";');
	}
	
	$show['favoritethreads'] = true;
}
else
{
	$show['favoritethreads'] = false;
}

// ############################### start favorite posts ################################

$favoriteposts = $DB_site->query("
				SELECT favorites.*, post.username 
				FROM " . TABLE_PREFIX . "favorites as favorites
				LEFT JOIN " . TABLE_PREFIX . "post as post ON (post.postid = favorites.entry_id)
				WHERE favorites.userid = '$bbuserinfo[userid]'
				AND favorites.entry_type = 'post' 
				ORDER BY favorites.entry_title
				");

if ($DB_site->num_rows($favoriteposts) > 0)
{
	while ($post = $DB_site->fetch_array($favoriteposts))
	{
		eval('$favoritepostbits .= "' . fetch_template('vbfavorites_favpostbit') . '";');
	}
	
	$show['favoriteposts'] = true;
}
else
{
	$show['favoriteposts'] = false;
}

###########################################################################################################################
#  
# ./includes/functions_databuild.php
###########################################################################################################################

 
---------------------------------------------------------------------------------------------------------------------------

			$DB_site->query("DELETE FROM " . TABLE_PREFIX . "deletionlog WHERE type = 'post' AND primaryid IN ($postids" . "0)");

---------------------------------------------------------------------------------------------------------------------------
 
---------------------------------------------------------------------------------------------------------------------------

			$DB_site->query("DELETE FROM " . TABLE_PREFIX . "favorites WHERE entry_type='post' AND entry_id IN ($postids" . "0)");

---------------------------------------------------------------------------------------------------------------------------
    
---------------------------------------------------------------------------------------------------------------------------


		$DB_site->query("DELETE FROM " . TABLE_PREFIX . "subscribethread WHERE threadid = $threadid");

---------------------------------------------------------------------------------------------------------------------------
 
---------------------------------------------------------------------------------------------------------------------------


		$DB_site->query("DELETE FROM " . TABLE_PREFIX . "favorites WHERE entry_type='thread' AND entry_id = $threadid");

---------------------------------------------------------------------------------------------------------------------------
    
---------------------------------------------------------------------------------------------------------------------------

		$DB_site->query("DELETE FROM " . TABLE_PREFIX . "reputation WHERE postid = $postid");

---------------------------------------------------------------------------------------------------------------------------
 
---------------------------------------------------------------------------------------------------------------------------

		$DB_site->query("DELETE FROM " . TABLE_PREFIX . "favorites WHERE entry_type='post' AND entry_id = $postid");

---------------------------------------------------------------------------------------------------------------------------
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$																				$$$
$$$							 	ADD TEMPLATES										$$$
$$$																				$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
---------------------------------------------------------------------------------------------------------------------------

###########################################################################################################################
#   
# vbfavorites_addentry
###########################################################################################################################
#   

$stylevar[htmldoctype]
<html dir="$stylevar[textdirection]" lang="$stylevar[languagecode]">
<head>
	<!-- no cache headers -->
	<meta http-equiv="Pragma" content="no-cache" />
	<meta http-equiv="Expires" content="-1" />
	<meta http-equiv="Cache-Control" content="no-cache" />
	<!-- end no cache headers -->
	<title>$vboptions[bbtitle] -  </title>
	$headinclude
</head>
<body>
$header
$navbar

<!-- main -->
<form action="vbfavorites.php" method="post">
<input type="hidden" name="do" value="addentry" />
<input type="hidden" name="id" value="$id" />
<input type="hidden" name="type" value="$type" />

<table class="tborder" cellpadding="$stylevar[cellpadding]" cellspacing="$stylevar[cellspacing]" border="0" width="100%" align="center">
<tbody>
	<tr class="thead">
  	 <td width="100%" align="center" colspan="2">
  	 <b> :  </b>
  	 </td>
  	</tr>

	<tr class="tborder">
  	 <td width="200px" align="left"><b>:</b></td>
  	 <td width="50%"><i>$type</i></td>
  	</tr>

	<tr class="tborder">
  	 <td width="200px" align="left"><b>:</b></td>
  	 <td width="50%"><input type="text" name="entry[entry_title]" style="width:100%" value="$source[$titlefield]" /></td>
  	</tr>

  	<tr class="thead">
  	 <td width="100%" align="center" colspan="2">
  	 <input type="submit" name="submit" value="Add $type to Favorites" class="button" />
  	 </td>
	</tr>

</tbody>
</table>
<!-- /main -->

$footer

</body>
</html>

###########################################################################################################################
#   
# vbfavorites_favpostbit
###########################################################################################################################
#   

<tr>
	<td class="alt1" width="95%">		
	<a href="showpost.php?$session[sessionurl]p=$post[entry_id]"><b>$post[entry_title]</b></a><br />
	<span class="smallfont">$post[username] - <a href="vbfavorites.php?do=modifyentry&type=post&id=$post[entry_id]">[edit entry]</a></span>
	</td>
	
	<td class="alt1" align="center"><input type="checkbox" name="entry_id[]" value="$post[entry_id]" /></td>
</tr>

###########################################################################################################################
#   
# vbfavorites_favthreadbit
###########################################################################################################################
#   

<tr>
	<td class="alt1" width="95%">		
	<a href="showthread.php?$session[sessionurl]t=$thread[entry_id]"><b>$thread[entry_title]</b></a> <span class="smallfont">(<a href="forumdisplay.php?$session[sessionurl]f=$thread[forumid]"><b>$thread[forumtitle]</b></a>)</span><br />
	<span class="smallfont">$thread[postusername] - <a href="vbfavorites.php?do=modifyentry&type=thread&id=$thread[entry_id]">[edit entry]</a></span>
	</td>
	
	<td class="alt1" align="center"><input type="checkbox" name="entry_id[]" value="$thread[entry_id]" /></td>
</tr>

###########################################################################################################################
#   
# vbfavorites_modifyentry
###########################################################################################################################
#   

$stylevar[htmldoctype]
<html dir="$stylevar[textdirection]" lang="$stylevar[languagecode]">
<head>
	<!-- no cache headers -->
	<meta http-equiv="Pragma" content="no-cache" />
	<meta http-equiv="Expires" content="-1" />
	<meta http-equiv="Cache-Control" content="no-cache" />
	<!-- end no cache headers -->
	<title>$vboptions[bbtitle] -  </title>
	$headinclude
</head>
<body>
$header
$navbar

<!-- main -->
<form action="vbfavorites.php" method="post">
<input type="hidden" name="do" value="modifyentry" />
<input type="hidden" name="id" value="$id" />
<input type="hidden" name="entry[entry_type]" value="$entryinfo[entry_type]" />

<table class="tborder" cellpadding="$stylevar[cellpadding]" cellspacing="$stylevar[cellspacing]" border="0" width="100%" align="center">
<tbody>
	<tr class="thead">
  	 <td width="100%" align="center" colspan="2">
  	 <b> :  </b>
  	 </td>
  	</tr>

	<tr class="tborder">
  	 <td width="200px" align="left"><b>:</b></td>
  	 <td width="50%"><i>$entryinfo[entry_type]</i></td>
  	</tr>

	<tr class="tborder">
  	 <td width="200px" align="left"><b>:</b></td>
  	 <td width="50%"><input type="text" name="entry[entry_title]" style="width:100%" value="$entryinfo[entry_title]" /></td>
  	</tr>

  	<tr class="thead">
  	 <td width="100%" align="center" colspan="2">
  	 <input type="submit" name="submit" value=" $type  " class="button" />
  	 </td>
	</tr>

</tbody>
</table>
<!-- /main -->

$footer

</body>
</html>

---------------------------------------------------------------------------------------------------------------------------
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$																				$$$
$$$						 		EDIT TEMPLATES										$$$
$$$																				$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
---------------------------------------------------------------------------------------------------------------------------

###########################################################################################################################
# 
# postbit
###########################################################################################################################

---------------------------------------------------------------------------------------------------------------------------
 
---------------------------------------------------------------------------------------------------------------------------

$post[postdate]<if condition="!$show['detailedtime']">, $post[posttime]</if>

---------------------------------------------------------------------------------------------------------------------------
 
---------------------------------------------------------------------------------------------------------------------------

 - <a href="vbfavorites.php?$session[sessionurl]do=addentry&type=post&id=$post[postid]">[ ]</a>

###########################################################################################################################
# 
# postbit_legacy
###########################################################################################################################

---------------------------------------------------------------------------------------------------------------------------
 
---------------------------------------------------------------------------------------------------------------------------

$post[postdate]<if condition="!$show['detailedtime']">, $post[posttime]</if>

---------------------------------------------------------------------------------------------------------------------------
 
---------------------------------------------------------------------------------------------------------------------------

 - <a href="vbfavorites.php?$session[sessionurl]do=addentry&type=post&id=$post[postid]">[ ]</a>

###########################################################################################################################
# 
# SHOWTHREAD
###########################################################################################################################

---------------------------------------------------------------------------------------------------------------------------
 
---------------------------------------------------------------------------------------------------------------------------

		<if condition="$show['firstunreadlink']">
			<a href="$firstunread"><img class="inlineimg" src="$stylevar[imgdir_button]/firstnew.gif" alt="$vbphrase[view_first_unread]" border="0" /></a>
			<a href="$firstunread"><strong>$vbphrase[view_first_unread]</strong></a>
		</if>
		&nbsp;

---------------------------------------------------------------------------------------------------------------------------
 
---------------------------------------------------------------------------------------------------------------------------

<b><a href="vbfavorites.php?$session[sessionurl]do=addentry&type=thread&id=$thread[threadid]">[  ]</a></b>

###########################################################################################################################
# 
# USERCP
###########################################################################################################################

---------------------------------------------------------------------------------------------------------------------------
 
---------------------------------------------------------------------------------------------------------------------------

<!-- ############## END SUBSCRIBED THREADS ##############  -->

---------------------------------------------------------------------------------------------------------------------------
 
---------------------------------------------------------------------------------------------------------------------------

<if condition="$show['favoritethreads']">
<form action="usercp.php" method="post">
<input type="hidden" name="entry_type" value="thread" />
<!-- ############## FAVORITE THREADS ##############  -->
<table class="tborder" cellpadding="$stylevar[cellpadding]" cellspacing="$stylevar[cellspacing]" border="0" width="100%" align="center">
<thead>
	<tr>
		<td class="tcat" colspan="2">
			 
		</td>
	</tr>
</thead>
<tbody>
	$favoritethreadbits
	<tr>
		<td class="tcat" colspan="2">
			<center><input type="submit" name="deletefavorites" class="button" value=" " /></center>
		</td>
	</tr>
</tbody>
</table>
<br />
<!-- ############## END FAVORITE THREADS ##############  -->
</form>
</if>

<if condition="$show['favoriteposts']">
<form action="usercp.php" method="post">
<input type="hidden" name="entry_type" value="post" />
<!-- ############## FAVORITE POSTS ##############  -->
<table class="tborder" cellpadding="$stylevar[cellpadding]" cellspacing="$stylevar[cellspacing]" border="0" width="100%" align="center">
<thead>
	<tr>
		<td class="tcat" colspan="2">
			 
		</td>
	</tr>
</thead>
<tbody>
	$favoritepostbits
	<tr>
		<td class="tcat" colspan="2">
			<center><input type="submit" name="deletefavorites" class="button" value=" " /></center>
		</td>
	</tr>
</tbody>
</table>
<br />
<!-- ############## END FAVORITE POSTS ##############  -->
</form>
</if>

###########################################################################################################################
# 
# navbar
###########################################################################################################################

---------------------------------------------------------------------------------------------------------------------------
 
---------------------------------------------------------------------------------------------------------------------------

		<if condition="$show['member']">
			<td class="vbmenu_control"><a href="usercp.php?$session[sessionurl]">$vbphrase[user_cp]</a></td>
		</if>

---------------------------------------------------------------------------------------------------------------------------
 
---------------------------------------------------------------------------------------------------------------------------


		<if condition="$show[lastfavthreads] OR $show[lastfavposts]"><td class="vbmenu_control" id="favorites"><a href="usercp.php?$session[sessionurl]"></a> <script type="text/javascript"> vbmenu_register("favorites"); </script> </td></if>

---------------------------------------------------------------------------------------------------------------------------
 
---------------------------------------------------------------------------------------------------------------------------

<!-- / NAVBAR POPUP MENUS -->

---------------------------------------------------------------------------------------------------------------------------
 
---------------------------------------------------------------------------------------------------------------------------

	<div class="vbmenu_popup" id="favorites_menu" style="display:none">
		<table cellpadding="4" cellspacing="1" border="0">

		<if condition="$show[lastfavthreads]">
		<tr>
		<td class="thead"> $lastfavthreadlimit   </td>
		</tr>
		$lastfavthreadbit
		</if>

		<if condition="$show[lastfavposts]">
		<tr>
		<td class="thead"> $lastfavpostlimit   </td>
		</tr>
		$lastfavpostbit
		</if>

		<tr><td class="thead"><a href="usercp.php?$session[sessionurl]">   </a></td></tr>
		</table>
	</div>

---------------------------------------------------------------------------------------------------------------------------
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$																				$$$
$$$								FILE UPLOADS										$$$
$$$																				$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
---------------------------------------------------------------------------------------------------------------------------
  
vbfavorites.php
   
      

###########################################################################################################################
#    ,,,,   
#http:/www.nabdh-alm3ani.net
###########################################################################################################################